

goog.provide('gaillard.KVOObject');

goog.require('goog.events.EventTarget');

/**
 *
 * @constructor
 * @extends {goog.events.EventTarget}
 */
gaillard.KVOObject = function() {
    this.data_ = {};
};

goog.inherits(gaillard.KVOObject, goog.events.EventTarget);

gaillard.KVOObject.prototype.set = function (key, value) {
    this.data_[key] = value;
    this.dispatchEvent(key);
};

gaillard.KVOObject.prototype.get = function (key) {
    return this.data_[key];
};



// (function () {

	// function getCallbackName(name) {
		// return name+"_changed";
	// }

	// function getClassName(obj) {
		// return obj.prototype.constructor.name || obj.prototype.constructor.toString();
	// }

	// function getListeners(obj) {
		// if (!obj._listeners_) {
			// obj._listeners_ = {};
		// }
		// return obj._listeners_;
	// }

	// gaillard.KVOObject.prototype.set = function (name, value) {
		
		// this[name] = value;
		
		// var listenersList = getListeners(this)[name],
			// l,
			// callbackName = getCallbackName(name),
			// obj,i;
		// if (typeof listenersList !== "undefined") {
			// for (i = 0, l = listenersList.length; i < l; i+=1) {
				// obj = listenersList[i];			
				// if (typeof obj[callbackName] !== "function") {
					// throw new Error(callbackName+" doesn't exist on object " + getClassName(listenersList[i]));
				// }
				// obj[callbackName](value);
			// }
		// }
	// };

	// gaillard.KVOObject.prototype.get = function (name) {
		// return this[name];
	// };

	// gaillard.KVOObject.prototype.register = function(name, obj) {
		
		// var listenersList = getListeners(this);
		// if (!listenersList[name]) {
			// listenersList[name] = [];
		// }
		
		// listenersList[name].push(obj);
		
		// if (this.hasOwnProperty(name)) {
			// obj[getCallbackName(name)](this[name]);
		// }
	// };

	// gaillard.KVOObject.prototype.unregister = function(name, obj) {
		// var i, 
			// listeners = getListeners(this)[name],
			// len = listeners.length;

		// for (i = 0; i < len; i+=1) {
			// if (obj === listeners[i]) {
				// delete listeners[i];
			// }
		// }
	// };
// })();


